原始题目:剑指 Offer 15. 二进制中1的个数 (opens new window)
解题思路:
首先介绍一个位操作,当 时, & 会消除掉 最右边的 ,举个例子:
假设 ,则 , & , 和 的对比之下,是否是 最右边的 变成了 就是 了。
因此,每进行一次上述操作, 就会消掉一个 ,能进上多少次上述操作,说明 就有多少个 。
代码:
public int hammingWeight(int n) {
int c = 0;
while (n != 0) {
c++;
n = n & (n - 1);
}
return c;
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
复杂度分析
时间复杂度: 为 的二进制 的个数。
空间复杂度: 变量 使用常数大小额外空间。
← 14-Ⅰ.剪绳子 18.删除链表的节点 →